Lukket. Dette spørgsmål har brug for detaljer eller klarhed. Det accepteres i øjeblikket ikke svar. Vil du forbedre dette spørgsmål? Tilføj detaljer og afklar problemet ved at redigere dette indlæg. Lukket for 1 år siden. Forbedre dette spørgsmål Jeg laver en kodeudfordring, og jeg vil hente de første 3 værdier fra mit array ved at angive startindekset og kun få de første (3 eller kan være en hvilken som helst længde) værdier fra startindekset. Jeg prøvede denne kode, og den fungerer, men kodestrukturen er for lang, så hvordan kan jeg gøre dette kortere, så det kan være let at forstå. int n = 10; dobbelt signatur = ny dobbelt [] {1, 1, 1}; dobbelt [] ret = nyt dobbelt [n]; dobbelt sum = 0; ret [0] = signatur [0]; ret [1] = signatur [1]; ret [2] = signatur [2]; int x, i; for (i = 0; i
2021-01-31 08:19:51
Ved hjælp af LINQ kan du prøve noget som dette: var-værdier = array.Skip (indeks) Tag (n) .ToArray (); Hvor indeks er indekset for det første element, og n antallet af de varer, du vil vælge. For eksempel. https://dotnetfiddle.net/Pk1rwY Som en sidebemærkning. Brug af LINQ betyder ikke, at din kode ville være hurtigere. Det ville være mere kompakt / læsbart osv. For at du kan vurdere, hvor performant er din kode, skal du bruge noget som BenchmarkDotNet. | Ingen Linq-løsning: privat statisk T [] Uddrag(T [] kilde, int fraIndex, int længde) { hvis (null == kilde) smid nyt ArgumentNullException (nameof (kilde)); ellers hvis (fromIndex <0) smid nyt ArgumentOutOfRangeException (nameof (fromIndex), "Fra indeks skal være ikke-negativt"); ellers hvis (længde <0) smid nyt ArgumentOutOfRangeException (nameof (længde), "Længden skal være ikke-negativ"); hvis (fraIndex> = kilde.Længde || længde == 0) returner nyt T [0]; T [] resultat = nyt T [Math.Min (længde, kilde.Længde - fraIndex)]; Array.Copy (kilde, fraIndex, resultat, 0, resultat.Længde); returresultat } Derefter dobbelt [] signatur = ny dobbelt [] {0, 1, 2, 3, 4, 5}; dobbelt [] ret = Uddrag (signatur, 3, 2); Console.Write (string.Join (",", ret)); Resultat: 3, 4 | Fra dit spørgsmål skal du drage fordel af operatørerne .Tage og .Skip. var result = array.Skip (startingIndex) .Take (numberOfElements); Fra din kode ser det således ud til, at du prøver at gøre noget lidt anderledes, nemlig summeringselementer. .Sum-operatøren kan være til hjælp her. | Er det ikke det svar, du leder efter? Gennemse andre spørgsmål mærket c # arrays linq eller stil dit eget spørgsmål.